/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller;

import Entity.*;
import Model.*;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import library.Koneksi;
import library.StatusSidang;


/**
 *
 * @author mr2
 */
public class BeritaAcaraTALogic{
    HttpServletRequest request;

    public BeritaAcaraTALogic(HttpServletRequest request) {
        this.request = request;
    }
    
    //Logic menampilkan halaman kelola jadwal sidang oleh laboran
    public String ListBeritaAcara(){
        
        String jenisSidang = request.getParameter("jenisSidang");
        String tglSidang = request.getParameter("tglSidang");
        String pesan = request.getParameter("pesan");
        String idUser = request.getParameter("idUser");
        
        String role = null;
        String lab = null;
        
        HttpSession session = request.getSession();
        ArrayList listRole = new ArrayList();
        listRole = (ArrayList)session.getAttribute("role");
        
        boolean bukanRole = true;
        if (session.getAttribute("role") != null) {
            for (int i = 0; i < listRole.size(); i++) {
                if ((listRole.get(i).equals("laboran_ppsi") || listRole.get(i).equals("laboran_spk") || listRole.get(i).equals("laboran_ebisnis"))) {
                    bukanRole = false;
                }
            }
        }
        
        if (session.getAttribute("role") == null) {
            return "login";
        } else if (bukanRole) {
            return "login";
        }else {

            for(int count = 0; count < listRole.size(); count++){
                role = (String)listRole.get(count);          
            }

            if(tglSidang == null){
                tglSidang = "";
            }

            if(role.equals("laboran_ppsi")){
                lab = "PPSI";
            }else if(role.equals("laboran_spk")){
                lab = "SPK";
            }else{
                lab = "EBISNIS";
            }

            TA ta = new TA();
            Sidang sidang = new Sidang();

            ta.setNamaLab(lab);
            sidang.setTa(ta);
            sidang.setJenisSidang(jenisSidang);
            sidang.setTglSidang(tglSidang);

            SidangTAModel BeritaAcara = new SidangTAModel();
            List<Sidang> listBeritaAcara = BeritaAcara.ListBeritaAcara(sidang);

            DosenModel dosen = new DosenModel();
            List<Dosen> namaDosen = dosen.ListPembimbing();

            request.setAttribute("tglSidang", tglSidang);
            request.setAttribute("lab", lab);
            request.setAttribute("jenisSidang", jenisSidang);
            request.setAttribute("pesan", pesan);
            request.setAttribute("listBeritaAcara", listBeritaAcara);
            request.setAttribute("namaDosen", namaDosen);
            request.setAttribute("idUser", idUser);
            request.setAttribute("menu", "monitoringTA");
            request.setAttribute("submenu", "kelolaBeritaAcara");

            return "monta/Laboran_list_berita_acara.jsp";
        } 
    }
    
    //Logic untuk Menampilkan detail berita acara
    public String DetailBeritaAcara(){
        
        String id_Sidang = request.getParameter("idSidang");
        int idSidang = Integer.parseInt(id_Sidang);

        String id_TA = request.getParameter("idTA");
        int idTA = Integer.parseInt(id_TA);
        
        String idUser = request.getParameter("idUser");
        String jenisSidang = request.getParameter("jenisSidang");
        String tglSidang = request.getParameter("tglSidang");
        
        TA ta = new TA();
        Sidang sidang = new Sidang();
        
        ta.setIdTA(idTA);
        sidang.setTa(ta);
        sidang.setJenisSidang(jenisSidang);
        sidang.setIdSidang(idSidang);
        
        SidangTAModel detailSidang = new SidangTAModel();
        TAModel detailTA = new TAModel();
        
        
        TA detailDataTA = detailTA.getDetailDataTA(ta);
        Sidang detailBeritaAcara = detailSidang.getDetailBeritaAcara(sidang);
        
        DosenModel dosen = new DosenModel();
        List<Dosen> listPembimbing1 = dosen.ListPembimbing1();
        List<Dosen> listPembimbing2 = dosen.ListPembimbing();
        List<Dosen> listPenguji1 = dosen.ListPenguji1(detailTA.getDetailDataTA(ta).getPembimbing1());
        List<Dosen> listPenguji2 = dosen.ListPenguji2(detailTA.getDetailDataTA(ta).getPembimbing2());
        
        StatusSidang statusSidang = new StatusSidang();
        List<StatusSidang> listStatusProposal = statusSidang.StatusSidangProposal();
        List<StatusSidang> listStatusProgress = statusSidang.StatusSidangProgress();
        List<StatusSidang> listStatusFinal = statusSidang.StatusSidangFinal();
        
        request.setAttribute("idUser", idUser);
        request.setAttribute("jenisSidang",jenisSidang);
        request.setAttribute("tglSidang", tglSidang);
        request.setAttribute("listPembimbing1", listPembimbing1);
        request.setAttribute("listPembimbing2", listPembimbing2);
        request.setAttribute("listPenguji1", listPenguji1);
        request.setAttribute("listPenguji2", listPenguji2);
        request.setAttribute("detailDataTA",detailDataTA);
        request.setAttribute("detailBeritaAcara", detailBeritaAcara);
        request.setAttribute("listStatusProposal", listStatusProposal);
        request.setAttribute("listStatusProgress", listStatusProgress);
        request.setAttribute("listStatusFinal", listStatusFinal);
        request.setAttribute("menu", "monitoringTA");
        request.setAttribute("submenu", "kelolaBeritaAcara");
        
        return "monta/Laboran_detail_berita_acara_2.jsp";
    }
    
    //Logic untuk melakukan rekam atau update berita acara.
    public String RekamBeritaAcara(){
        
        String jenisSidang = request.getParameter("jenisSidang");
        String id_Sidang = request.getParameter("idSidang");
        int idSidang = Integer.parseInt(id_Sidang);
        String statusSidang = request.getParameter("statusSidang");
//        String tglDiterima = request.getParameter("tglDiterima");
        String idUser = request.getParameter("idUser");
        String tglSidang = request.getParameter("tglSidang");
                
        User user = new User();
        TA ta = new TA();
        Sidang sidang = new Sidang();
        SidangTAModel beritaAcara = new SidangTAModel();
        
        user.setIdUser(idUser);
        ta.setUser(user);
        sidang.setTa(ta);
        sidang.setJenisSidang(jenisSidang);
        sidang.setIdSidang(idSidang);
        sidang.setStatusSidang(statusSidang);
//        sidang.setTglDiterima(tglDiterima);
        
        String pesan = null;
        String isiPesan = null;
        
        if(id_Sidang != null){           
            
            if("SIDANG PROPOSAL".equals(jenisSidang)){
                
                boolean RekamBeritaAcara = beritaAcara.RekamBeritaAcara(sidang);
                
                if(RekamBeritaAcara){
                    pesan = "sukses";
                    isiPesan = "Penjadwalan sidang sukses";
                }else{
                    pesan = "gagal";
                    isiPesan = "Penjadwalan sidang gagal";
                }
            }else{
                String finalNilaiPembimbing1 = request.getParameter("nilaiPembimbing1");
                String finalNilaiPembimbing2 = request.getParameter("nilaiPembimbing2");
                String finalNilaiPenguji1 = request.getParameter("nilaiPenguji1");
                String finalNilaiPenguji2 = request.getParameter("nilaiPenguji2");
                
                if("LULUS".equals(statusSidang) || "LULUS DENGAN REVISI".equals(statusSidang) ){
                    String NilaiPembimbing2 = null;
                    String NilaiPenguji2 = null;
                
                    if(request.getParameter("nilaiPembimbing2") == null){
                        NilaiPembimbing2 = "0";
                    }else{
                        NilaiPembimbing2 = finalNilaiPembimbing2;
                    }

                    if(finalNilaiPenguji2 == null){
                        NilaiPenguji2 = "0";
                    }else{
                        NilaiPenguji2 = finalNilaiPenguji2;
                    }


                    int nilaiPembimbing1 = Integer.parseInt(finalNilaiPembimbing1);
                    int nilaiPembimbing2 = Integer.parseInt(NilaiPembimbing2);
                    int nilaiPenguji1 = Integer.parseInt(finalNilaiPenguji1);
                    int nilaiPenguji2 = Integer.parseInt(NilaiPenguji2);


                    int nilaiAngka = nilaiAngkaTA(nilaiPembimbing1, nilaiPembimbing2, nilaiPenguji1, nilaiPenguji2);
                    String nilaiHuruf = nilaiHuruTA(nilaiAngka);

                    sidang.setStatusSidang(statusSidang);
//                    sidang.setTglDiterima(tglDiterima);
                    sidang.setNilaiPembimbing1(nilaiPembimbing1);
                    sidang.setNilaiPembimbing2(nilaiPembimbing2);
                    sidang.setNilaiPenguji1(nilaiPenguji1);
                    sidang.setNilaiPenguji2(nilaiPenguji2);
                    sidang.setNilaiAngka(nilaiAngka);
                    sidang.setNilaiHuruf(nilaiHuruf);
                }else{
                    sidang.setStatusSidang(statusSidang);
//                    sidang.setTglDiterima(tglDiterima);
                }
                              
                boolean RekamBeritaAcara = beritaAcara.RekamBeritaAcara(sidang);
                
                if(RekamBeritaAcara){
                    pesan = "sukses";
                    isiPesan = "Penjadwalan sidang sukses";
                }else{
                    pesan = "gagal";
                    isiPesan = "Penjadwalan sidang gagal";
                }
                    
            }
            return "SidangTAController?page=listBeritaAcara&&jenisSidang="+jenisSidang+"&&tglSidang="+tglSidang+"&&pesan="+pesan;    
        }else{
            return ListBeritaAcara();
        }       
    }
    
    //Logic untuk menampilkan rekap berita acara TA pada akun koordinator TA
    public String RekapBeritaAcaraTA(){
        
        //get parameter dari user
        String jenisSidang = request.getParameter("jenisSidang");
        String status = request.getParameter("status");
//        String tglAwal = request.getParameter("tglAwal");
//        String tglAkhir = request.getParameter("tglAkhir");
        String periodeGet = request.getParameter("periode");
        
        //Membuat objek sidang untuk menampung status sidang sama jenis sidang
        Sidang sidang = new Sidang();
        sidang.setJenisSidang(jenisSidang);
        sidang.setStatusSidang(status);
        
        HttpSession session = request.getSession();
        ArrayList listRole = new ArrayList();
        listRole = (ArrayList)session.getAttribute("role");
        
        boolean bukanRole = true;
        if (session.getAttribute("role") != null) {
            for (int i = 0; i < listRole.size(); i++) {
                if ((listRole.get(i).equals("koordinator_ta"))) {
                    bukanRole = false;
                }
            }
        }
        
        if (session.getAttribute("role") == null) {
            return "login";
        } else if (bukanRole) {
            return "login";
        }else{
            //buat objek list sebagai isi pilihan di <option> values
            YudisiumModel list = new YudisiumModel();
            List<Yudisium> periodeYudisium = list.ListYudisium(0);

            if(periodeGet != null){
                String[] token = periodeGet.split(",");
                String periode = token[2];
                request.setAttribute("periode", periode);
            }

            SidangTAModel beritaAcara = new SidangTAModel();
            List<Sidang> rekapBeritaAcara = beritaAcara.RekapBeritaAcara(sidang, periodeGet);

            DosenModel dosen = new DosenModel();
            List<Dosen> listPenguji1 = dosen.ListPembimbing1();
            List<Dosen> listPenguji2 = dosen.ListPembimbing();

            request.setAttribute("listPenguji1", listPenguji1);
            request.setAttribute("listPenguji2", listPenguji2);
            request.setAttribute("jenisSidang", jenisSidang);
            request.setAttribute("status", status);

            request.setAttribute("periodeYudisium", periodeYudisium);
            request.setAttribute("rekapBeritaAcara", rekapBeritaAcara);
            request.setAttribute("periodeGet", periodeGet);

            request.setAttribute("menu", "monitoringTA");
            request.setAttribute("submenu", "rekapBeritaAcara");

            return "monta/KoorTA_rekap_berita_acara.jsp";
        }
    }
    
    //Menampilkan detail dari rekap berita acara pada akun koordinator TA
    public String DetailRekapBeritaAcara(){
        
        String id_Sidang = request.getParameter("idSidang");
        int idSidang = Integer.parseInt(id_Sidang);

        String id_TA = request.getParameter("idTA");
        int idTA = Integer.parseInt(id_TA);
        
        String idUser = request.getParameter("idUser");
        String jenisSidang = request.getParameter("jenisSidang");
        String tglSidang = request.getParameter("tglSidang");
        
        TA ta = new TA();
        Sidang sidang = new Sidang();
        
        ta.setIdTA(idTA);
        sidang.setTa(ta);
        sidang.setJenisSidang(jenisSidang);
        sidang.setIdSidang(idSidang);
        
        TAModel detailTA = new TAModel();
        TA detailDataTA = detailTA.getDetailDataTA(ta);
        
        SidangTAModel detail = new SidangTAModel();
        Sidang detailSidang = detail.getDetailBeritaAcara(sidang);
        
        DosenModel dosen = new DosenModel();
        List<Dosen> listPembimbing1 = dosen.ListPembimbing1();
        List<Dosen> listPembimbing2 = dosen.ListPembimbing();
        List<Dosen> listPenguji1 = dosen.ListPenguji1(detailTA.getDetailDataTA(ta).getPembimbing1());
        List<Dosen> listPenguji2 = dosen.ListPenguji2(detailTA.getDetailDataTA(ta).getPembimbing2());
        
        StatusSidang statusSidang = new StatusSidang();
        List<StatusSidang> listStatusProposal = statusSidang.StatusSidangProposal();
        List<StatusSidang> listStatusProgress = statusSidang.StatusSidangProgress();
        List<StatusSidang> listStatusFinal = statusSidang.StatusSidangFinal();
        
        request.setAttribute("idUser", idUser);
        request.setAttribute("jenisSidang",jenisSidang);
        request.setAttribute("tglSidang", tglSidang);
        request.setAttribute("listPembimbing1", listPembimbing1);
        request.setAttribute("listPembimbing2", listPembimbing2);
        request.setAttribute("listPenguji1", listPenguji1);
        request.setAttribute("listPenguji2", listPenguji2);
        request.setAttribute("detailDataTA",detailDataTA);
        request.setAttribute("detailSidang", detailSidang);
        request.setAttribute("listStatusProposal", listStatusProposal);
        request.setAttribute("listStatusProgress", listStatusProgress);
        request.setAttribute("listStatusFinal", listStatusFinal);
        
        request.setAttribute("menu", "monitoringTA");
        request.setAttribute("submenu", "rekapBeritaAcara");
        
        return "monta/KoorTA_detail_rekapBerita_acara.jsp";
    }
    
    /*Logic untuk melakukan upda status TA, dilakukan saat ada peserta sidang 
     yang status sidangnya dibatalkan, sehingga statusnya di non-aktifkan, methode ini
     digunakan pada fitur rekap berita acara pada akun koordinator TA*/
    public String UpdateStatusTA(){
        
        String id_TA = request.getParameter("idTA");
        
        if(id_TA != null){
            int idTA = Integer.parseInt(id_TA);
            String statusTA = request.getParameter("statusTA");
            String jenisSidang = request.getParameter("jenisSidang");
            String statusSidang = request.getParameter("statusSidang");
            String periode = request.getParameter("periode");
            
            System.out.println(periode);
            TA ta = new TA();
            TAModel updateStatusTA = new TAModel();

            ta.setIdTA(idTA);
            ta.setStatusTA(statusTA);

            updateStatusTA.updateStatusTA(ta);

            return "SidangTAController?page=rekapBeritaAcara&&jenisSidang="+jenisSidang+"&&status="+statusSidang+"&&periode"+periode;
        }else{
            return RekapBeritaAcaraTA();
        }
    }
    
//    public String DetailRekapBeritaAcara(){
//        
//        String idUser = request.getParameter("idUser");
//        String jenisSidang = request.getParameter("jenisSidang");
//        
//        User user = new User();
//        SidangTA sidangta = new SidangTA();
//        user.setIdUser(idUser);
//        sidangta.setUser(user);
//        sidangta.setJenisSidang(jenisSidang);
//        
//        SidangTAModel beritaAcara = new SidangTAModel(); 
//        SidangTA detailTA = beritaAcara.getInfoTA(idUser);
////        SidangTA detailSidang = beritaAcara.getDetailSidang(sidangta);
//        
//        SidangTAModel pembimbing = new SidangTAModel();
//        String pembimbing1 = pembimbing.getInfoTA(idUser).getPembimbing1();
//        String pembimbing2 = pembimbing.getInfoTA(idUser).getPembimbing2();
//        
//        DosenModel dosen = new DosenModel();
//        List<Dosen> listPembimbing1 = dosen.ListPembimbing1();
//        List<Dosen> listPembimbing2 = dosen.ListPembimbing2();
//        List<Dosen> listPenguji1 = dosen.ListPenguji1(pembimbing1);
//        List<Dosen> listPenguji2 = dosen.ListPenguji2(pembimbing2);
//        
//        StatusSidang statusSidang = new StatusSidang();
//        List<StatusSidang> listStatusProposal = statusSidang.StatusSidangProposal();
//        List<StatusSidang> listStatusProgress = statusSidang.StatusSidangProgress();
//        List<StatusSidang> listStatusFinal = statusSidang.StatusSidangFinal();
//        
//        request.setAttribute("idUser", idUser);
//        request.setAttribute("jenisSidang",jenisSidang);
//        request.setAttribute("listPembimbing1", listPembimbing1);
//        request.setAttribute("listPembimbing2", listPembimbing2);
//        request.setAttribute("listPenguji1", listPenguji1);
//        request.setAttribute("listPenguji2", listPenguji2);
//        request.setAttribute("detailTA",detailTA);
////        request.setAttribute("detailSidang", detailSidang);
//        request.setAttribute("listStatusProposal", listStatusProposal);
//        request.setAttribute("listStatusProgress", listStatusProgress);
//        request.setAttribute("listStatusFinal", listStatusFinal);
//        
//        return "monta/KoorTA_detail_rekapBerita_acara.jsp";
//    }
    
    //Logic ini digunakan untuk menghitung nilai angka sidang final mahasiswa
    public int nilaiAngkaTA(int nilaiPem1, int nilaiPem2, int nilaiPeng1, int nilaiPeng2 ){  
        
        int nilaiTA = 0;
        
        if(nilaiPem2 == 0){
            if(nilaiPeng2 == 0){
                nilaiTA = (nilaiPem1 + nilaiPeng1)/2;
            }else{
                nilaiTA = (nilaiPem1 + nilaiPeng1 + nilaiPeng2)/3;
            }
        }else{
            if(nilaiPeng2 == 0){
                nilaiTA = (nilaiPem1 + nilaiPem2 + nilaiPeng1)/3;
            }else{
                nilaiTA = (nilaiPem1 + nilaiPem2 + nilaiPeng1 + nilaiPeng2)/4;
            }
        }
        return nilaiTA;
    }
    
    //Logic ini digunakan untuk menemukan nilai huruf dari sidang final mahasiswa
    public String nilaiHuruTA(int nilaiAngka){
        
        String nilaiHuruf = null;
        
        if(nilaiAngka >= 81 && nilaiAngka <= 100){
            nilaiHuruf = "A";
        }else if(nilaiAngka >= 71 && nilaiAngka <= 80){
            nilaiHuruf = "AB";
        }else if(nilaiAngka >= 66 && nilaiAngka <= 70){
            nilaiHuruf = "B";
        }else if(nilaiAngka >= 61 && nilaiAngka <= 65){
            nilaiHuruf = "BC";
        }else if(nilaiAngka >= 56 && nilaiAngka <= 60){
            nilaiHuruf = "C";
        }else if(nilaiAngka >= 41 && nilaiAngka <= 55){
            nilaiHuruf = "D";
        }else{
            nilaiHuruf = "E";
        }
        
        return nilaiHuruf;
    }
    
//    //Logic melakukan penghapusan sidang
//    public String HapusDataSidang() throws SQLException{
//        
//        String jenisSidang = request.getParameter("jenisSidang");
//        String status = request.getParameter("status");
//        String tglAwal = request.getParameter("tglAwal");
//        String tglAkhir = request.getParameter("tglAkhir");
//        String idUser = request.getParameter("idUser");
//        
//        SidangTAModel hapusSidang = new SidangTAModel();
//        hapusSidang.hapusDataSidang(idUser);
//        
//        return "SidangTAController?page=rekapBeritaAcara&&jenisSidang="+jenisSidang+"&&status="+status+"&&tglAwal="+tglAwal+"&&tglAkhir"+tglAkhir;
//    }
    
    
}
